import axios from 'axios'
import qs from 'qs'
import { userStore } from '@/store/user'

// axios实例
const service = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL,
  timeout: 5000,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8'
  }
})

//请求拦截器
service.interceptors.request.use(config => {
  const useUserStore = userStore()
  //config.headers['token'] = localStorage.getItem('token')
  // 统一使用Bearer前缀格式
  if (useUserStore.token) {
    config.headers.Authorization = `Bearer ${useUserStore.token}`
  }  
	  // 追加时间戳，防止GET请求缓存
    if (config.method?.toUpperCase() === 'GET') {
        config.params = { ...config.params, t: Date.now() }
    }
    // 支持表单提交
    if (Object.values(config.headers).includes('application/x-www-form-urlencoded')) {
        config.data = qs.stringify(config.data)
    }
  return config
  }, error => {
    return Promise.reject(error)
})

//响应拦截器
service.interceptors.response.use(
  // 请求成功
  response => {
    const { code, data, msg } = response.data
    if (code === 0) {
      return data
    } else if (code === 401) {
      // router.push('/login')
      ElMessage.error(`请求错误: ${msg}`)
      return Promise.reject({
        code: 401,
        message: msg || '未授权，请重新登录'
      })
    } else {
    // 失败（请求成功了，但是业务失败了）
    // ElMessage.error(`错误在拦截层: ${msg}`)
    return Promise.reject({ 
      code,
      message: msg || '业务逻辑错误'
    })
    }
  },
  // 请求失败
  error => {
    return Promise.reject(error)
  }
)

export default service
